//1、引入对应模块
import Vue, { isProxy } from 'vue';
import VueRouter from 'vue-router';

//重写路由构造函数原型对象上的push，replace方法

//先把原来的push和replace功能保存一下
const originPush = VueRouter.prototype.push; //先将之前的存储到一个变量中
const originReplace = VueRouter.prototype.replace; //同上

//修改VueRouter原型上的push用于解决重复跳转时报错的问题

VueRouter.prototype.push = function (location, okCallBack, errCallBack) {
  if (okCallBack === undefined && errCallBack === undefined) {
    //从上面的判断成立的话，表示没有传递这两个参数
    originPush.call(this, location).catch(() => {}); //统一处理报错的问题，实现一劳永逸
  } else {
    originPush.call(this, location, okCallBack, errCallBack);
  }
};

// 2、注册路由模块
Vue.use(VueRouter);
import routes from './routes';

//修改VueRouter原型上的replace用于解决重复跳转时报错的问题
VueRouter.prototype.replace = function (location, okCallBack, errCallBack) {
  if (okCallBack === undefined && errCallBack === undefined) {
    //从上面的判断成立的话，表示没有传递这两个参数
    originReplace.call(this, location).catch(() => {}); //统一处理报错的问题，实现一劳永逸
  } else {
    originReplace.call(this.location, okCallBack, errCallBack);
  }
};

// 3. 创建路由实例并添加路由规则
const router = new VueRouter({
  mode: 'history', // 设置路由模式  不要#
  routes,
  scrollBehavior(to, from, savedPosition) {
    if (savedPosition) {
      return savedPosition;
    } else {
      return { x: 0, y: 0 };
    }
  },
});

export default router;
